package ninder.system.control;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;

import ninder.system.model.Atividade;
import ninder.system.model.Paciente;
import ninder.system.util.HibernateUtil;

import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;
import org.hibernate.criterion.SimpleExpression;
import org.hibernate.exception.ConstraintViolationException;

import com.google.gson.Gson;

public class AtividadeManager {
	
	
	private static AtividadeManager manager = null;

	private AtividadeManager() {

	}

	public static synchronized AtividadeManager getInstance() {
		if (manager == null) {
			manager = new AtividadeManager();
		}
		return manager;
	}

	public Integer createAtividade(Atividade a) {

		return (Integer) HibernateUtil.create(a);
	}

	public void updateAtividade(Atividade a) {

		HibernateUtil.update(a);
	}

	public void deleteAtividade(Atividade a) {

		HibernateUtil.delete(a);
	}
	
	
	@SuppressWarnings("unchecked")
	public List<Atividade> getAtividades(int id_paciente) throws Exception{
		Collection<SimpleExpression> exps = new ArrayList<SimpleExpression>();
		exps.add(Restrictions.like("id_paciente", id_paciente));
		List<Atividade> atividades = null;
		try {
			atividades = (List<Atividade>) HibernateUtil.createQuery(Atividade.class,
					exps);
		} catch (ConstraintViolationException e) {
			throw new Exception();
		}

		return atividades.isEmpty() ? null : atividades;
	}
	
	
	
	
	@SuppressWarnings("unchecked")
	public List<Atividade> getAllAtividades() {
		Session session = HibernateUtil.getSession();
		session.beginTransaction();
		List<Atividade> result = session.createSQLQuery(
				"select * from atividade order by data").addEntity("t", Atividade.class).list();
		session.getTransaction().commit();
		return result;
	}
	
	
	 public String getListUser(String criteria) {
	        String stringList;
	        Gson g = new Gson();
	        List<Atividade> list = Collections.synchronizedList(new ArrayList<Atividade>());

	        List<Atividade> u;
	        try {
	            u = this.getAtividades(Integer.parseInt(criteria));

	            for (int i = 0; i < u.size(); i++) {
	                list.add(u.get(i));
	            }

	        } catch (Exception e) {

	            e.printStackTrace();
	        }

	        stringList = g.toJson(list, ArrayList.class);

	        return stringList;
	    }
}
